/**---------公共方法------------*/

/**
 * 获取本地数据
 */
const getUserData = () => {
  const localData = localStorage.getItem("localData");
  if (localData) {
    return JSON.parse(localData);
  }
  return {};
};
// data:{
//   sentence:[],
//   workTimeAM: '',
//   workTimePM
//   salaryTime:'',
//   dn: false
// }
/**
 * 存储本地数据
 * @param {*} data
 */
const setStoreData = (type, data) => {
  if (!type || data === null) return;
  const totalData = getUserData();
  totalData[type] = data;
  localStorage.setItem("localData", JSON.stringify(totalData));
};

/**---------各个模块逻辑代码------------ */

/**
 * 卡片1逻辑代码
 */
let textList = [
  // 初始文本列表
  "摸鱼不是逃避，而是为了更好的冲锋。",
  "摸鱼一时爽，一直摸鱼一直爽！",
  "人生就像愤怒的小鸟，当你失败时，总有几头猪在笑。",
  "忽如一夜春风来，白日做梦想发财。",
];
const stortList = getUserData();
if (stortList?.sentence) {
  textList = stortList?.sentence;
} else {
  setStoreData("sentence", textList);
}

const getRandomText = (arr) => {
  const randomIndex = Math.floor(Math.random() * arr?.length);
  const text = arr[randomIndex];
  $("#textInput").html(text);
};
getRandomText(textList);

// 点击设置按钮添加文本
$("#btn1").on("click", function () {
  const userInput = prompt(
    "请输入想要展示的文案,每次只能输入一条,建议20个字符以内"
  );
  if (userInput !== null) {
    textList.push(userInput);
    setStoreData("sentence", textList);
  }
});
// 点击随机按钮展示文案
$("#btn2").on("click", function () {
  getRandomText(textList);
});

/**
 * 卡片2逻辑代码
 */
$("#dn").prop("checked", stortList?.dn);
let timeRef = "";
const updateTimeDifference = () => {
  if (timeRef) {
    clearInterval(timeRef);
  }
  const time = (stortList?.dn ? stortList?.workTimePM : stortList?.workTimeAM) || "18:00";
  const [hour, minute] = time.split(/:|：/)?.map(Number);
  timeRef = setInterval(() => {
    // 获取当前时间
    const currentTime = new Date();
    // 创建当天目标时间的Date对象
    const targetTime = new Date(
      currentTime.getFullYear(),
      currentTime.getMonth(),
      currentTime.getDate(),
      hour,
      minute,
      0
    );
    // 计算时间差（以毫秒为单位）
    let timeDifference = targetTime - currentTime;
    // 如果目标时间已经过去，时间差为负数
    if (timeDifference < 0) {
      $("#timeBox1").text("已下班，记得打卡");
      return;
    }
    // 将时间差转换为小时和分钟
    const hours = Math.floor(timeDifference / (1000 * 60 * 60));
    const minutes = Math.floor(
      (timeDifference % (1000 * 60 * 60)) / (1000 * 60)
    );
    const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
    $("#hour").html(hours);
    $("#minute").html(minutes);
    $("#second").html(seconds);
  }, 1000);
};
const remainingTime = updateTimeDifference();
// 点击设置按钮添加文本
$("#btn3").on("click", function () {
  const userInput = prompt(`请输入下班时间,每次只能输入一条,例如18:00,注意当前班次（${stortList?.dn ? "夜班" : "早班"}）,更改时先改班次`);
  if (userInput !== null) {
    stortList?.dn
      ? setStoreData("workTimePM", userInput)
      : setStoreData("workTimeAM", userInput);
    stortList?.dn
      ? (stortList["workTimePM"] = userInput)
      : (stortList["workTimeAM"] = userInput);
    updateTimeDifference();
  }
});
$("#dn").on("click", function () {
  // 检查复选框是否被选中
  const isCheckboxChecked = $("#dn").is(":checked");
  // 可以在这里根据复选框的状态执行其他操作
  if (isCheckboxChecked) {
    // 夜班
    setStoreData("dn", true);
    stortList["dn"] = true;
    updateTimeDifference();
  } else {
    // 早班
    setStoreData("dn", false);
    stortList["dn"] = false;
    updateTimeDifference();
  }
});

/**
 * 卡片3逻辑代码
 */
const daysUntilPayday = (targetData) => {
  const today = new Date();
  const currentYear = today.getFullYear();
  const currentMonth = today.getMonth();
  const payday = new Date(currentYear, currentMonth, targetData);

  // 判断今天是否是发工资日
  if (today.getDate() === Number(targetData)) {
    $("#timeBox2").text("今天是发薪日");
    return;
  }
  // 如果今天已经过了这个月的10号，那么需要计算下个月的10号
  if (today > payday) {
    payday.setMonth(currentMonth + 1);
  }
  // 计算两个日期之间的差值（以毫秒为单位）
  const differenceInTime = payday.getTime() - today.getTime();
  // 将毫秒转换为天数
  const differenceInDays = Math.ceil(differenceInTime / (1000 * 3600 * 24));
  $("#issue").html(differenceInDays);
};

const targetData = stortList?.salaryTime || "10";
daysUntilPayday(targetData);

$("#btn4").on("click", function () {
  const userInput = prompt(
    "请输入发工资日期,每次只能输入一条,例如10，就是每个月10号"
  );
  if (userInput !== null && Number(userInput) < 32 && Number(userInput) > 0) {
    setStoreData("salaryTime", userInput);
    daysUntilPayday(userInput);
  }
});


$(window).on('beforeunload', function() {
  clearInterval(timeRef);
  console.log("页面卸载，定时器已清除");
});
